package org.rency.common.messager.beans;

import java.io.Serializable;
import java.util.Map;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.rency.common.messager.exception.MessageException;
import org.rency.common.utils.converts.JsonConvert;
import org.springframework.util.Assert;

public class SMSAlidayuEntity implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 4494579218083060248L;
	
	/**
	 * 服务地址
	 */
	private String smsAlidayuAddress;
	
	/**
	 * 服务Key
	 */
	private String smsAlidayuAppkey;
	
	/**
	 * 服务密钥
	 */
	private String smsAlidayuSecret;
	
	/**
	 * 被调用的目标AppKey，仅当被调用的API为第三方ISV提供时有效。可选
	 */
	private String targetAppKey;
	
	/**
	 * 公共回传参数，在“消息返回”中会透传回该参数；举例：用户可以传入自己下级的会员ID，在消息返回时，该会员ID会包含在内，用户可以根据该会员ID识别是哪位会员使用了你的应用。可选
	 */
	private String extend;
	
	/**
	 * 短信类型，传入值请填写normal
	 */
	private String smsType = "normal";
	
	/**
	 * 短信签名，传入的短信签名必须是在阿里大鱼“管理中心-短信签名管理”中的可用签名。如“阿里大鱼”已在短信签名管理中通过审核，则可传入”阿里大鱼“（传参时去掉引号）作为短信签名。短信效果示例：【阿里大鱼】欢迎使用阿里大鱼服务。
	 */
	private String smsFreeSignName;
	
	/**
	 * Json 短信模板变量，传参规则{"key":"value"}，key的名字须和申请模板中的变量名一致，多个变量之间以逗号隔开。示例：针对模板“验证码${code}，您正在进行${product}身份验证，打死不要告诉别人哦！”，传参时需传入{"code":"1234","product":"alidayu"}。可选
	 */
	private String smsParam;
	
	/**
	 * 短信接收号码。支持单个或多个手机号码，传入号码为11位手机号码，不能加0或+86。群发短信需传入多个号码，以英文逗号分隔，一次调用最多传入200个号码。示例：18600000000,13911111111,13322222222
	 */
	private String recNum;
	
	/**
	 * 短信模板ID，传入的模板必须是在阿里大鱼“管理中心-短信模板管理”中的可用模板。示例：SMS_585014。必须
	 */
	private String smsTemplateCode;
	
	/**
	 * 阿里证书路径
	 */
	private String certPath;
	
	public void validator(){
		try{
    		Assert.hasText(smsAlidayuAddress,SMSPlateform.ALIDAYU+"服务地址不能为空");
    		Assert.hasText(smsAlidayuAppkey,SMSPlateform.ALIDAYU+"Appkey不能为空");
    		Assert.hasText(smsAlidayuSecret,SMSPlateform.ALIDAYU+"密钥不能为空");
    		Assert.hasText(recNum,"短信接收人不能为空");
    		Assert.hasText(smsTemplateCode,SMSPlateform.ALIDAYU+"短信模板不能为空");
    		Assert.hasText(certPath,SMSPlateform.ALIDAYU+"证书路径不能为空");
    		Assert.hasText(smsParam,"请配置短信模板参数");
    	}catch(Exception e){
    		throw new MessageException("参数校验异常.",e);
    	}
	}

	public String getSmsAlidayuAddress() {
		return smsAlidayuAddress;
	}

	public void setSmsAlidayuAddress(String smsAlidayuAddress) {
		this.smsAlidayuAddress = smsAlidayuAddress;
	}

	public String getSmsAlidayuAppkey() {
		return smsAlidayuAppkey;
	}

	public void setSmsAlidayuAppkey(String smsAlidayuAppkey) {
		this.smsAlidayuAppkey = smsAlidayuAppkey;
	}

	public String getSmsAlidayuSecret() {
		return smsAlidayuSecret;
	}

	public void setSmsAlidayuSecret(String smsAlidayuSecret) {
		this.smsAlidayuSecret = smsAlidayuSecret;
	}

	public String getTargetAppKey() {
		return targetAppKey;
	}

	public void setTargetAppKey(String targetAppKey) {
		this.targetAppKey = targetAppKey;
	}

	public String getExtend() {
		return extend;
	}

	public void setExtend(String extend) {
		this.extend = extend;
	}

	public String getSmsType() {
		return smsType;
	}

	public String getSmsFreeSignName() {
		return smsFreeSignName;
	}

	public void setSmsFreeSignName(String smsFreeSignName) {
		this.smsFreeSignName = smsFreeSignName;
	}

	public String getSmsParam() {
		return smsParam;
	}

	public void setSmsParam(Map<String, String> smsParam) {
		this.smsParam = JsonConvert.toJSONString(smsParam);
	}

	public String getRecNum() {
		return recNum;
	}

	public void setRecNum(String recNum) {
		this.recNum = recNum;
	}

	public String getSmsTemplateCode() {
		return smsTemplateCode;
	}

	public void setSmsTemplateCode(String smsTemplateCode) {
		this.smsTemplateCode = smsTemplateCode;
	}
	
	public String getCertPath() {
		return certPath;
	}

	public void setCertPath(String certPath) {
		this.certPath = certPath;
	}

	public String toString(){
        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    }

}
